// 统一封装接口方法
// 每个方法负责请求一个url地址
// 逻辑页面,导入这个接口方法,就能发请求
// 好处：请求url路径,可以在这里统一管理
import axios from '@/utils/request'

// 登陆 - 登录功能
// axios内部,会把参数对象转成json字符串格式发刚给后台
// axios颞部,会自动携带请求参数(headers)里
export const loginApi = ({ mobile,code }) => axios({
    url: '/v1_0/authorizations',
    method: 'POST',
    data: {
        mobile,
        code
    }
})

// 用户 - 关注用户
export const userFollowedAPI = ({userId}) => axios({
    url: '/v1_0/user/followings',
    method: 'POST',
    data: {
        target: userId
    }
})

// 用户 - 取消关注
export const userUnFollowedAPI = ({userId}) => axios({
    url: `/v1_0/user/followings/${userId}`,
    method: 'DELETE'
})

// 用户 - 获取个人资料
export const userProfileAPI = () => axios({
    url: '/v1_0/user/profile'
})

// 用户 - 获取基本信息(我的页面显示数据)
export const getUserInfoAPI = () => axios({
    url: '/v1_0/user'
})

// 用户 - 更新头像
export const updateUserPhotoAPI = (fd) => axios({
    url: '/v1_0/user/photo',
    method: 'PATCH',
    data: fd // fd外面传进来的new FormData()表单对象
})

// 用户 - 更新基本资料
export const updateUserProfileAPI = (dataObj) => {
    // 判断,有值才带参数给后台,无值参数名不携带
    // 写法1：结构赋值,4个判断,往空对象上添加有值的加上去
    // 写法2：外面想传几对象key+value,就直接传入交给后台
    // 写法3：上面写法不够语义化
    const obj = {
        name: '',
        gender: 0,
        birthday: '',
        intro: ''
    }

    for (const prop in obj) { // 遍历参数对象里每个key
        if (dataObj[prop] === undefined) {
            // 用key去外面传入的参数对象匹配,如果没有找到
            delete obj[prop] // 从obj身上移除这对属性和值
        } else {
            obj[prop] = dataObj[prop] // 如果使用了,就从外面对象取出对应key值,保存到obj上
        }
    }

    return axios({
        url: '/v1_0/user/profile',
        method: 'PATCH', // 局部更新 -> PUT(全部更新)
        data: obj
    })
}

// 频道 - 获取所有频道
export const getAllChannelsAPI = () => axios({
    url: '/v1_0/channels',
    method: 'GET'
})

// 频道 - 获取用户选择的频道
// 注意：用户没有登陆,默认返回后台设置的默认频道列表
export const getUserChannelsAPI = () => axios({
    url: '/v1_0/user/channels',
    method: 'GET',
})

// 频道 - 更新覆盖频道
export const updateChannelsAPI = ({ channels }) => axios({
    url: '/v1_0/user/channels',
    method: 'PUT',
    data: { 
        channels //用户已选择整个频道数组
    }
})

// 频道 - 删除用户指定频道
export const removeTheChannelAPI = ({channelId}) => axios ({
    url: `/v1_0/user/channels/${channelId}`,
    method: 'DELETE'
})

// 新闻 - 获取文章新闻推荐
export const getAllArticlesAPI = ({channel_id,timestamp}) => axios({
    url: '/v1_0/articles',
    method: 'GET',
    params: {
        channel_id,
        timestamp
    }
})

// 新闻 - 对文章不喜欢
export const dislikeArticlesAPI = ({artId}) => axios({
    url: '/v1_0/article/dislikes',
    method: 'POST',
    data: {
        target: artId
    }
})

// 新闻 - 获取新闻详情
export const detailAPI = ({artId}) => axios({
    url: `/v1_0/articles/${artId}`,
    method: 'GET'
})

// 新闻 - 举报文章
export const reportArticlesAPI = ({artId,type}) => axios({
    url: '/v1_0/article/reports',
    method: 'POST',
    data: {
        target: artId,
        type: type,
        remark: '附加问题'
    }
})

// 新闻 - 对文章点赞
export const likeArticleAPI = ({artId}) => axios({
    url: '/v1_0/article/likings',
    method: 'POST',
    data: {
        target: artId
    }
})

// 新闻 - 取消点赞
export const unLikeArticleAPI = ({artId}) => axios({
    url: `/v1_0/article/likings/${artId}`,
    method: 'DELETE'
})

// 搜索 - 获取联想建议
export const suggesstionAPI = ({keywords}) => axios({
    url: '/v1_0/suggestion',
    method: 'GET',
    params: {
        q: keywords
    }
})

// 搜索 - 获取搜索结果页
export const searchResultAPI = ({page = 1, per_page = 10,q}) => axios({
    url: '/v1_0/search',
    method: 'GET',
    params: {
       page,
       per_page,
       q
    }
})

// 评论 - 获取评论或评论回复
export const commentsListAPI = ({id,offset = null,limit = 10}) => axios({
    url: '/v1_0/comments',
    method: 'GET',
    params: {
        // axios只针对params参数,如果发现键值对,值为null,会忽略此参数值不携带在url?后面
        type: 'a', // 什么时候需要外面传：此值会变化
        source: id,
        offset,
        limit
    }
})

// 评论 - 对评论或评论回复点赞
 export const commentsLikingsAPI = ({comId}) => {
     return axios({
         url: '/v1_0/comment/likings',
         method: 'POST',
         data: {
             target: comId
         }
     })
 }

// 评论 - 取消对评论或评论回复点赞
 export const commentDisLikingsAPI = ({comId}) => {
     return axios({
         url: `/v1_0/comment/likings/${comId}`,
         method: 'DELETE'
     })
 }

 // 评论 - 发布评论
 export const sendCommentAPI = ({artId,content,art_id = null}) => {
    // data请求体对象需要自己处理
    const obj = {
        target: artId,
        content
    }
    if(art_id !== null) { // 如果本次有第三个参数,证明是对评论进行回复
        obj.art_id = art_id
    }
    return axios({ 
        url: '/v1_0/comments',
        method: 'POST',
        data: obj
     })
 }
